//package com.sc.server.member.exception;
//
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.http.HttpStatus;
//import org.springframework.validation.BindException;
//import org.springframework.validation.BindingResult;
//import org.springframework.validation.FieldError;
//import org.springframework.web.bind.MethodArgumentNotValidException;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.ResponseStatus;
//import org.springframework.web.bind.annotation.RestControllerAdvice;
//
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * @author yuantongqin
// * desc:
// * 2020-08-11
// */
//@RestControllerAdvice
//public class GloablException {
//
//    private static Logger logger = LoggerFactory.getLogger(GloablException.class);
//
//    @Value("${spring.application.name}")
//    String applicationName;
//
//    @ExceptionHandler(MemberException.class)
//    public CcResult<String> memberException(MemberException memberException){
//        logger.info("member 服务异常：[{}]",memberException.getMessage());
//        CcResult result = new CcResult();
//        result.setCode(HttpStatus.INTERNAL_SERVER_ERROR.value()+"");
//        result.setMessage(memberException.getMessage());
//        return result;
//    }
//
//    @ExceptionHandler(BindException.class)
//    public CcResult bind(BindException bind){
//        logger.info("member 验证错误：[{}]",bind.getMessage());
//        CcResult result = new CcResult();
//        result.setCode(HttpStatus.BAD_REQUEST.value()+"");
//
//        //从 BindException获取字段校验信息
//        resovleFieldError(bind.getFieldErrors(),result);
//
//        return result;
//    }
//
//
//    @ExceptionHandler(MethodArgumentNotValidException.class)
//    @ResponseStatus(HttpStatus.OK)
//    public CcResult exceptionHandler(Exception e){
//        CcResult isbResult = new CcResult();
//        //从MethodArgumentNotValidException获取字段校验信息
//        MethodArgumentNotValidException argumentNotValidException = MethodArgumentNotValidException.class.cast(e);
//        BindingResult bindingResult = argumentNotValidException.getBindingResult();
//        resovleFieldError(bindingResult.getFieldErrors(),isbResult);
//        return isbResult;
//    }
//
//    /**
//     * 封装fieldError到isbResult中
//     * @param fieldErrors
//     * @param isbResult
//     */
//    private void resovleFieldError(List<FieldError> fieldErrors, CcResult isbResult){
//
//        List<FieldErrorInfo> validationErrorList = fieldErrors.stream().map(fieldError -> {
//            FieldErrorInfo fieldErrorInfo = new FieldErrorInfo();
//            fieldErrorInfo.setFieldName(fieldError.getField());
//            fieldErrorInfo.setFieldValue(String.valueOf(fieldError.getRejectedValue()));
//            fieldErrorInfo.setErrorMessage(fieldError.getDefaultMessage());
//            return fieldErrorInfo;
//        }).collect(Collectors.toList());
//
//        isbResult.setValidationErrorList(validationErrorList);
////        isbResult.customizeError(SysExceptionDesc.PARAM_INVALID.getCode(),SysExceptionDesc.PARAM_INVALID.getMessage(),applicationName);
//        isbResult.markRefused();
//    }
//}
